package com.anlu.base;

public class DelayedRemoteService implements RemoteService{

    private final long serverStartTime;
    private final int delay;

    /**
     * Constructor to create an instance of DelayedService, which is down for first few seconds.
     *
     * @param delay the delay after which service would behave properly, in seconds
     */
    public DelayedRemoteService(long serverStartTime, int delay) {
        this.serverStartTime = serverStartTime;
        this.delay = delay;
    }

    public DelayedRemoteService() {
        this.serverStartTime = System.nanoTime();
        this.delay = 20;
    }
    @Override
    public String call() throws RemoteServiceException {
        var currentTime =  System.nanoTime();
        if ((currentTime - serverStartTime) * 1.0 / (1000 * 1000 * 1000) < delay) {
            //Can use Thread.sleep() here to block and simulate a hung server
            throw new RemoteServiceException("Delayed service is down");
        }
        return "Delayed service is working";
    }
}
